package com.itcam.controller;

import com.itcam.pojo.Result;
import com.itcam.utils.AliOSSUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.annotation.Resource;
import java.io.File;
import java.io.IOException;
import java.util.UUID;

/**
 * Author:Cammy.Wu
 * Date:2024-06-21
 * Description:
 */

@Slf4j
@RestController
public class UploadController {

    /**
     *  String getOriginalFilename(); //获取原始文件名
     *  void transferTo(File dest); //将接收的文件转存到磁盘文件中
     *  long getSize(); //获取文件的大小，单位：字节
     *  byte[] getBytes(); //获取文件内容的字节数组
     *  InputStream getInputStream(); //获取接收到的文件内容的输入流
     */

    // 1.本地存储
    @PostMapping("/upload")
    public Result upload(String username, Integer age, MultipartFile image) throws Exception {
        log.info("文件上传:{}，{}，{}", username, age, image);

        // 获取原始文件名
        String originalFilename = image.getOriginalFilename();

        // 构造唯一的文件名（不能重复）- uuid（通用唯一识别码）
        assert originalFilename != null;
        int index = originalFilename.lastIndexOf(".");
        String newFilename = UUID.randomUUID().toString() + originalFilename.substring(index);
        log.info("新文件名：{}", newFilename);

        // 将文件存储在服务器的磁盘目录中 E:/Image/
        image.transferTo(new File("E:/Image/" + newFilename));

        return Result.success();
    }

    // 2.阿里云OSS
    // todo: Bucket：存储空间是用户用于存储对象（Object，就是文件）的容器，所有的对象都必须隶属于某个存储空间。
    // todo: SDK：Software Development Kit 的缩写，软件开发工具包，包括辅助软件开发的依赖（jar包）、代码示例等，都可以叫做SDK。
    @Autowired
    private AliOSSUtils aliOSSUtils;

    @PostMapping("/aliUpload")
    public Result AliUpload(MultipartFile image) throws Exception {
        String url=aliOSSUtils.upload(image);// 调用阿里云OSS工具类，将上传上来的文件存入阿里云
        return Result.success(url); // 将图片上传完成后的url返回，用于浏览器回显展示
    }
}
